#!/bin/bash

# 使用 riscv64-anyka-linux-musl-gcc 交叉编译安装 cJSON-1.7.15 的脚本
# 安装到当前目录的 install 子目录

set -e  # 出错时退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}=== 开始使用 riscv64-anyka-linux-musl-gcc 交叉编译安装 cJSON-1.7.15 ===${NC}"

# 获取当前脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INSTALL_DIR="${SCRIPT_DIR}/install/riscv64"
BUILD_DIR="${SCRIPT_DIR}/build_riscv64"
SOURCE_DIR="${SCRIPT_DIR}/cJSON-1.7.15"

# 交叉编译工具链
CROSS_COMPILE="riscv64-anyka-linux-musl-"
CC="${CROSS_COMPILE}gcc"
CXX="${CROSS_COMPILE}g++"
AR="${CROSS_COMPILE}ar"
STRIP="${CROSS_COMPILE}strip"
RANLIB="${CROSS_COMPILE}ranlib"

echo -e "${YELLOW}工作目录: ${SCRIPT_DIR}${NC}"
echo -e "${YELLOW}安装目录: ${INSTALL_DIR}${NC}"
echo -e "${YELLOW}构建目录: ${BUILD_DIR}${NC}"
echo -e "${YELLOW}交叉编译器: ${CC}${NC}"

# 检查交叉编译工具链是否可用
if ! command -v "${CC}" &> /dev/null; then
    echo -e "${RED}错误: 找不到交叉编译器 ${CC}${NC}"
    echo -e "${YELLOW}请确保 riscv64-anyka-linux-musl-gcc 工具链已正确安装并添加到 PATH${NC}"
    exit 1
fi

echo -e "${GREEN}交叉编译器版本:${NC}"
${CC} --version | head -1

# 创建必要的目录
mkdir -p "${INSTALL_DIR}"
mkdir -p "${BUILD_DIR}"

# 检查源码目录是否存在
if [ ! -d "${SOURCE_DIR}" ]; then
    echo -e "${RED}错误: 找不到源码目录 ${SOURCE_DIR}${NC}"
    echo -e "${YELLOW}正在解压 v1.7.15.tar.gz...${NC}"
    
    if [ -f "${SCRIPT_DIR}/v1.7.15.tar.gz" ]; then
        cd "${SCRIPT_DIR}"
        tar -xzf v1.7.15.tar.gz
        echo -e "${GREEN}解压完成${NC}"
    else
        echo -e "${RED}错误: 找不到 v1.7.15.tar.gz 文件${NC}"
        exit 1
    fi
fi

# 进入构建目录
cd "${BUILD_DIR}"

echo -e "${YELLOW}配置 CMake 进行交叉编译...${NC}"
cmake "${SOURCE_DIR}" \
    -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
    -DCMAKE_BUILD_TYPE=Release \
    -DENABLE_CJSON_TEST=OFF \
    -DENABLE_CJSON_UTILS=ON \
    -DBUILD_SHARED_LIBS=ON \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_PROCESSOR=riscv64 \
    -DCMAKE_C_COMPILER="${CC}" \
    -DCMAKE_CXX_COMPILER="${CXX}" \
    -DCMAKE_AR="${AR}" \
    -DCMAKE_STRIP="${STRIP}" \
    -DCMAKE_RANLIB="${RANLIB}" \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY

echo -e "${YELLOW}开始编译...${NC}"
make -j$(nproc)

echo -e "${YELLOW}开始安装...${NC}"
make install

echo -e "${GREEN}=== riscv64-anyka-linux-musl-gcc 交叉编译安装完成 ===${NC}"
echo -e "${GREEN}安装路径: ${INSTALL_DIR}${NC}"
echo -e "${GREEN}库文件: ${INSTALL_DIR}/lib${NC}"
echo -e "${GREEN}头文件: ${INSTALL_DIR}/include${NC}"

# 显示安装的文件
echo -e "${YELLOW}已安装的文件:${NC}"
find "${INSTALL_DIR}" -type f | head -10

# 显示库文件的架构信息
echo -e "${YELLOW}库文件架构信息:${NC}"
if [ -f "${INSTALL_DIR}/lib/libcjson.so" ]; then
    file "${INSTALL_DIR}/lib/libcjson.so"
fi

echo -e "${GREEN}完成!${NC}"